package com.cskaoyan.javase._2inner._1member._0introduction;

/**
 * 成员内部类
 * 成员内部类是最普通的内部类
 * 它直接定义在另一个类的成员位置,可以近似看成该类的一个成员。
 *
 * 语法：
 * //外围类
 * [访问权限修饰符] class EnclosedClazz{
 * //成员内部类
 *   [访问权限修饰符] class InnerClazz{
 *  }
 * }
 *
 * 成员内部类的自身特点
 * 主要从以下几个角度分析：
 *      1.访问权限修饰符
 *          四种访问级别皆可
 *          而单独定义的class只有两种访问级别
 *          既然使用内部类,普通都是为了封装,隐藏,保护类
 *          所以内部类的访问权限,往往都是私有的.
 *
 *      2.成员特点
 *          它仍然是一个类,虽然它是内部类
 *          和普通类的成员相比,成员内部类当中是没有静态声明的:
 *              a.没有静态成员变量
 *              b.没有静态成员方法
 *              c.没有静态代码块
 *           注意:
 *              允许定义全局常量,但是不允许触发类加载的全局常量
 *              也就是说只能定义字面值常量赋值的全局常量
 *
 *           除此之外,和普通类一样
 *           有构造器,有构造代码块
 *
 *      3.继承和实现
 *          既然它是一个类,虽然它是内部类
 *          但是照样继承,照样实现
 *          在开发中,成员内部类的继承和实现可以根据具体情况,具体对待
 *
 * @since 15:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

// 外围类
class EnclosedClazz {
    class A {
    }

    private interface IA {
    }

    // 成员内部类
    class InnerClazz extends A implements IA {
        int a;
        private int b = 10;
        // Inner classes cannot have static declarations
        // static int c = 20;
        // static void test(){}
        // static {}
        static final int D = 30;
        static final String STRING = "abc";

        // static final String STRING2 = new String("abc");
        {

        }

        public InnerClazz(int a, int b) {
            this.a = a;
            this.b = b;
        }

        public InnerClazz() {
        }
    }
}

class A {
}

interface IA {
}